胎嘎侯
來到Many to Many的第2天,遲遲未進關係綁定真是對不住,這裡想跟各位分享的東西實在是太多了啊~
接續昨日創建migration的步驟,由於手邊沒數據,先來跟分享如何建立實用且快速的偽造數據來測試Many to Many的綁定關係。
想像建構一個生產很多模型玩具的工廠
,你需要準備原料
與幾道程序
才能順利產出。
在預設情況下,工廠
名稱來自Eloquent類別,也可以改用資料表來命名。原料
即為利用Faker實例,在return內編寫隨機建立結構化的假資料。
//'name'欄位=>利用$faker產出name屬性的默認測試值
'name'=>$faker->name
--->想依不同情況產出你認為最合適的偽造數據,請參考Faker
把原料都倒進去了,開啟製作程序
,該怎麼做呢?
這時我們得好好了解Tinker的作用。
Tinker為REPL(read-eval-print loop),中文為「交互式命令行介面」,拆開來看為讀取-求值-輸出的循環,它也是能與資料庫互動的一個實用工具。依據官方文件所示,所有的應用程序都包括Tinker,我們能在command line上與應用程序相互作用。對工程師來說,使用Tinker可以增強開發工作流程。
待會就會看到要如何在tinker內執行factory命令。
首先在terminal輸入下列命令,建立factory檔案:
//創建UserVideo Model
php artisan make:model UserVideo
//--model用來綁定工廠與指定的Model名稱。
php artisan make:factory UserFactory --model=User
php artisan make:factory VideoFactory --model=Video
php artisan make:factory UserVideoFactory --model=UserVideo
依檔名輸入要定義的偽造數據內容
$factory->define(User::class, function (Faker $faker) {
return [
'name'=>$faker->name,
'email'=>$faker->unique()->safeEmail,
'email_verified_at'=>now(),
'password'=>rand(1,999999999),
];
});
php artisan tinker
factory(App\User::class,10)->create()
除了時間以外,所有特性都是不同的,偽造數據成功!
$factory->define(Video::class, function (Faker $faker) {
return [
'name'=>$faker->sentence,
];
});
php artisan tinker
factory(App\Video::class,10)->create()
$factory->define(UserVideo::class, function (Faker $faker) {
return [
'user_id'=>User::all()->random()->id,
'video_id'=>Video::all()->random()->id,
'days'=>rand(1,20),
];
});
class UserVideo extends Model
{
protected $table = 'user_video';
}
php artisan tinker
factory(App\UserVideo::class,10)->create()
如果沒有綁定protected $table = 'user_video';
會出現下列錯誤:
SQLSTATE[42S02]: Base table or view not found: 1146 Table Email_Verification.user_videos' doesn't exist
今天落落長的文章就到這裡~明天是雙十連假,放假之餘一起努力完成鐵人賽吧!
Go!
參考圖書:
Laravel 啟動與運行 (Laravel: Up and Running: A Framework for Building Modern PHP Apps)